using System;
using System.Collections.Generic;
using System.Text;
using FrameworkQ.ObjectSpace.Data.Schema;

namespace FrameworkQ.ObjectSpace.Data.Providers
{
    public interface ISqlDataTypeTranslator
    {
		string TranslateDataTypeExpression(ISqlDataType dataType);

        string GetAnsiStringExpression(ISqlDataType dataType);
        string GetAnsiStringFixedLengthExpression(ISqlDataType dataType);
        string GetBinaryExpression(ISqlDataType dataType);
        string GetBooleanExpression(ISqlDataType dataType);
        string GetByteExpression(ISqlDataType dataType);
        string GetCurrencyExpression(ISqlDataType dataType);
        string GetDateTimeExpression(ISqlDataType dataType);
        string GetDecimalExpression(ISqlDataType dataType);
        string GetDoubleExpression(ISqlDataType dataType);
        string GetInt16Expression(ISqlDataType dataType);
        string GetInt32Expression(ISqlDataType dataType);
        string GetInt64Expression(ISqlDataType dataType);        
        string GetSingleExpression(ISqlDataType dataType);
        string GetStringExpression(ISqlDataType dataType);
        string GetStringFixedLengthExpression(ISqlDataType dataType);
        string GetUInt16Expression(ISqlDataType dataType);
        string GetUInt32Expression(ISqlDataType dataType);
        string GetUInt64Expression(ISqlDataType dataType);
        string GetGuidExpression(ISqlDataType dataType);

		char OpeningIdentifier { get; }
        char ClosingIdentifier { get; }
		char ParameterIdentifier { get;}
		char ParameterPlaceholderIdentifier { get;}

        string NextStatementIdentifier { get; }
        string IdentityExpression { get; }
        bool SupportsIdentifierAroundTypename { get; }
        string GetDefaultExpression(string defaultValue, bool needsQuote);

    }
}
